#include"allhead.h"

int getparameter(char *key, char *value)
{

    FILE * file = fopen("conf", "r");
    CHECK_ERROR(file , NULL , "文件没找到");
    while(1)
    {
        char line[100];
        bzero(line, sizeof(line));
        // 读一行数据
        char *res = fgets(line, sizeof(line), file);
        if(res == NULL)
        {
        char buf[] = "没有要找的内容 \n";
        memcpy(value, buf, strlen(buf));
        return -1;
        }
        // 处理数据
        char *line_key = strtok(line, "=");
        if(strcmp(key, line_key) == 0)
        {
        // 要找的内容
        char *line_value = strtok(NULL, "=");
        memcpy(value, line_value, strlen(line_value));
        return 0;
        }
    }
}

int main(int argc, char *argv[])
{
    char ip[100];
    getparameter("ip" , ip);
    char port[10];
    int sofd = initSocket("127.0.0.1", "8080");
    int epo_fd = epoll_create(1);
       
    addEvent(sofd , epo_fd);

    User_manager tmp_umanager;
    create_and_init_userM(&tmp_umanager);

    thread_manager tmanager;
    initThreadPool(&tmanager);
    startThreadPool(&tmanager);

    tmanager.umanager = &tmp_umanager;//提前把userManager放进去



    epoll_event even_list[1024];
    while(1)
    {
       int num = epoll_wait(epo_fd , even_list , 1024, -1);
       int connect_fd;
       //User * user;
       for(int i = 0 ; i < num ; i++)
       {
           //不被阻塞后判断就绪队列都有谁
           if(even_list[i].data.fd == sofd)
           {
               connect_fd = accept(sofd , NULL , 0);
               addEvent(connect_fd , epo_fd);
               printf("epoll.c/ 25:con is %d\n" , connect_fd);

               //user = newUser(connect_fd);
               //um_add_user(umanager , user);

            }//判断是否已经存在 ， 后续判断可能更改
            else
            {
                inserQue(&(tmanager.qManager) , even_list[i].data.fd);
                //分配任务 在哪分配
                //sleep(10);
                bool flag = distributeTask(&tmanager);
            }
           //else if(user = um_judge_user_exist_by_fd(umanager , even_list[i].data.fd))
           //{   
           //    //唤醒发消息线程去执行聊天发消息 
           //    //判断用户状态：有无加入的小组
           //    //TODO: 对消息类型进行判断
           //   userMesType t;
           //   recv(even_list[i].data.fd , &t , sizeof(userMesType) , 0);
           //   switch(t)
           //   {
           //   case LOGIN:

           //       break;
           //   case SIGNUP:

           //       break;
           //   case SENDFILE:
           //       break;
           //   case RECVFILE:
           //       break;
           //   case CHAT:
           //       break;
           //   default:
           //       break;
           //   }
           //    printf("发消息线程执行..\n");
           //}
           //else if(1)
           //{   
           //    //TODO:子进程执行完后的通知
           //}
       }
    }
       return 0;
}

